// 导入定义验证规则的模块
const Joi = require('joi')

/**
 * string() 值必须是字符串
 * alphanum() 值只能是包含 a-zA-Z0-9 的字符串
 * min(length) 最小长度
 * max(length) 最大长度
 * required() 值是必填项，不能为 undefined
 * pattern(正则表达式) 值必须符合正则表达式的规则
 */

// 手机号的正则表达式
const regMobile = /^1(3\d|4[5-9]|5[0-35-9]|6[567]|7[0-8]|8\d|9[0-35-9])\d{8}$/
// 用户信息模块的验证规则
const uid = Joi.string().regex(/\d{9}/).required().error(new Error('用户ID格式不正确'))
const username = Joi.string().min(2).max(8).required().error(new Error('用户名格式不正确'))
const password = Joi.string().pattern(/^[\S]{6,12}$/).required().error(new Error('密码格式不正确'))
const mobile = Joi.string().regex(regMobile).error(new Error('手机号格式不正确'))
const email = Joi.string().email().error(new Error('邮箱格式不正确'))
const role = Joi.number().valid(0, 1, 2, 3, 4, 5).required().error(new Error('角色数据格式不正确'))
const perid = Joi.number().valid(0, 1).default(0).error(new Error('权限数据格式不正确'))
const nickname = Joi.string().required()
const avatar = Joi.string().dataUri().required()

// =============================================================================

// 注册功能的表单验证规则对象
exports.register_schema = {
  // 表示需要对 req.body 中的数据进行验证
  body: {
    uid,
    username,
    password,
    mobile,
    mailbox: email,
    role,
    perid
  }
}
// 登录功能的表单验证规则对象
exports.login_schema = {
  // 表示需要对 req.body 中的数据进行验证
  body: {
    uid,
    password,
  },
}
// 验证规则对象 - 更新用户基本信息
exports.update_userinfo_schema = {
  body: {
    uid,
    username,
    email,
  },
}

// 验证规则对象 - 重置密码
exports.update_password_schema = {
  body: {
    oldPwd: password,
    newPwd: Joi.not(Joi.ref('oldPwd')).concat(password),
  },
}

// 验证规则对象 - 头像更新
exports.update_avatar_schema = {
  body: {
    avatar,
  },
}